This project is made with data from the General Social Survey (GSS).

While the GSS is not a panel survey, it is both a very long-running survey (running regularly since 1972), a very long survey (completing it involves a 90 minute interview) and one with a large and diverse set of participants (approximately 1500 people per year). And while the survey contains very little demographic information about the respondents, both “age of respondent” and “year of survey” are included in the results. Because of this, some basic manipulation of the data gets it to a place where we can use birth year as a unit of analysis, and the data begins to resemble time-series data in the aggregate. What I am looking at today is how survey respondents who share or nearly share a year of birth have changed their answers to GSS questions over their life and the life of the survey.

For the sake of sample size, I condensed the data down in two ways:
  1. Birth years were condensed into five-year intervals: birth cohort ‘1950’, for example, contains everyone born between 1950 and 1954; birth cohort ‘1955’ is everyone in 1955, 1956, 1957, 1958, and 1959; and so on.
  2. Any group with fewer than 50 people taking the survey that year was not included in the below visualizations.
A screenshot of an excel sheet of sample sizes. Acceptably large cohorts are highlighted to demonstrate the ‘shape’ of the available data.

A screenshot of an excel sheet of sample sizes. Acceptably large cohorts are highlighted to demonstrate the ‘shape’ of the available data.

The motivating question for this project was initially this:

Do we get more conservative as we get older?

Basically, yes.

That’s the sort of thing that seems to be common knowledge, anyway, with the line “If you aren’t a liberal when you’re young, you have no heart, but if you aren’t a middle-aged conservative, you have no head” often being quoted (and misattributed to Winston Churchill) by conservatives. But in 2014 The Upshot blog at the New York Times presented a theory of “formative events” shaping the political beliefs of generations, which remain stable over time. Further, it could be that people’s views actually don’t change that much, but are perceived as more conservative to newer generations which are increasingly liberal.

To test this I took the five-year birth cohort bins and plotted the mean of their answers to the “Political Views” question, which indicates the respodent’s self-evaluated place on a seven point scale traveling between “Very Liberal” (1), “Moderate” (4) and “Very Conservative” (7). These evaluations are fairly coherent and consistent in terms of their meaning. The overall trend line is presented in black.

Well, that seems pretty straightforward, just looking at it.

That individuals are self-reporting a greater rate of conservatism as the move further along in life likely means one of two things: One, people change their beliefs over time and actually do get more conservative, or two, somewhat less likely in my opinion, people as they get older perceive the world around them as shifting leftwards. That is, the same set of views that would have been called liberal in 1980 are conservative in 2010, and people holding those views recognize that.

But I did notice something interesting poking around this chart: the youngest age cohorts - as of the 2018 survey - are liberal compared to previous generations at the same age, and so far don’t seem to be trending leftwards Here’s the same data as above, presented as scatterplot and with the 2018 survey results highlighted:

Note: This is a static image.

While the respondents over the age of 40 are mostly in line with similarly-aged adults from previous surveys, respondents in their 30s are more liberal than any previous cohort, basically no different from the political leanings of (also relatively liberal) under-30 respondents. This brings me to the main two questions of this project:

  1. Is this trend unusual?

Yes, but it’s not unique.

This trend - a sustained and relatively wide political gap between two age cohorts - is best visualized by the below heatmap: darker colors for more conservative groups, lighter orange for more liberal groups. For the most part, any given cohort’s political movement is gradual or a bit noisy, and usually is not too different from the immediately older or younger group; the gap between the current under-40 set and the current over-40 set is much more stark, and seems to have been going since about 2010:

Having trouble reading this plot? Moving across a single row shows how a birth-year group moved as they aged. Moving down a single column shows the political views of increasingly older groups within the same survey year.

But today’s younger adults are not even the most self-reportedly liberal on record; that distinction goes to the generation born between 1945 and 1960, versus their slightly-older peers born before the end of WWII.

  1. Is this trend permanent?

I don’t know.

test of html formatting

## Warning: 'heatmap' objects don't have these attributes: 'showlegend'
## Valid attributes include:
## 'type', 'visible', 'opacity', 'name', 'uid', 'ids', 'customdata', 'meta', 'hoverinfo', 'hoverlabel', 'stream', 'transforms', 'uirevision', 'z', 'x', 'x0', 'dx', 'y', 'y0', 'dy', 'text', 'hovertext', 'transpose', 'xtype', 'ytype', 'zsmooth', 'connectgaps', 'xgap', 'ygap', 'zhoverformat', 'hovertemplate', 'zauto', 'zmin', 'zmax', 'zmid', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'coloraxis', 'xcalendar', 'ycalendar', 'xaxis', 'yaxis', 'idssrc', 'customdatasrc', 'metasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'hovertextsrc', 'hovertemplatesrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'

## Warning: 'heatmap' objects don't have these attributes: 'showlegend'
## Valid attributes include:
## 'type', 'visible', 'opacity', 'name', 'uid', 'ids', 'customdata', 'meta', 'hoverinfo', 'hoverlabel', 'stream', 'transforms', 'uirevision', 'z', 'x', 'x0', 'dx', 'y', 'y0', 'dy', 'text', 'hovertext', 'transpose', 'xtype', 'ytype', 'zsmooth', 'connectgaps', 'xgap', 'ygap', 'zhoverformat', 'hovertemplate', 'zauto', 'zmin', 'zmax', 'zmid', 'colorscale', 'autocolorscale', 'reversescale', 'showscale', 'colorbar', 'coloraxis', 'xcalendar', 'ycalendar', 'xaxis', 'yaxis', 'idssrc', 'customdatasrc', 'metasrc', 'hoverinfosrc', 'zsrc', 'xsrc', 'ysrc', 'textsrc', 'hovertextsrc', 'hovertemplatesrc', 'key', 'set', 'frame', 'transforms', '_isNestedKey', '_isSimpleKey', '_isGraticule', '_bbox'